package com.gxa.mapper;

import com.gxa.entity.SysReservation;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

public interface AppointmentManagementMapper {

    /**
     * 获取所有为被删除的预约管理信息
     *
     * @return 预约管理信息
     */
    List<SysReservation> findAllSysReservation();

    /**
     * 获取所有存活的预约管理信息
     *
     * @return 预约管理信息的数量
     */
    Integer getActiveReservationCount();

    /**
     * 根据条件获取预约管理信息 可以根据患者的姓名和手机号进行搜嗦
     *
     * @return 预约管理信息的列表
     */
    List<SysReservation> findAllSysReservationByQuery(@Param("query") String query);

    /**
     * 根据条件获取条数
     *
     * @param query 查询条件
     * @return 数量
     */
    Integer getQueryReservationCount(@Param("query") String query);

    /**
     * 增加一条预约信息
     *
     * @param userId    负责人ID
     * @param patientId 患者ID
     * @param date      预约时间
     * @return 影响的行数
     */
    Integer insertReservation(@Param("userId") Integer userId, @Param("patientId") Integer patientId, @Param("date") String date);


    /**
     * 根据ID删除某条消息
     *
     * @param id 预约信息的ID
     * @return 处理结果
     */
    Integer deleteById(@Param("id") Integer id,@Param("updateTime")Date date);

    /**
     * 根据ID更改预约的信息，只能处理未被删除的
     *
     * @param id   某条信息的ID
     * @param date
     * @return 处理结果
     */
    Integer handleReservationById(@Param("id") Integer id,@Param("updateTime") Date date);

    /**
     * 根据用户的ID获取目前拥有的预约数量（修改不能低于这个数量）
     *
     * @param userId 用户的ID
     * @return 拥有的预约数量
     */
    Integer getActiveReservationCountByUserId(@Param("userId") Integer userId);

    /**
     * 根据预约的ID 获取用户ID
     *
     * @param id 预约的ID
     */
    Integer getReservationUserIdById(@Param("id") Integer id);

    /**
     * 根据ID获取预约信息
     *
     * @param id 预约ID
     * @return 预约信息
     */
    SysReservation getReservationById(@Param("id") Integer id);

    /**
     * 根据ID获取已经处理或者已经被删除的
     *
     * @param id
     * @return
     */
    Integer getNoActiveStatusById(@Param("id") Integer id);

    /**
     * 删除已经已经
     * @param id
     * @return
     */
    Integer forceDeleteNoActiveRecord(@Param("id") Integer id);

    /**
     * 根据预约ID获取Status
     *
     * @param id
     * @return
     */
    Integer getStatusById(@Param("id") Integer id);

    /**
     * 根据患者ID查询人预约信息数
     *
     * @param patientId 患者ID
     * @return 预约人数
     */
    Integer getCountByPatientCount(@Param("patientId") Integer patientId);
}
